const collectArticle = require('./ORM');

// 写多条数据
async function createBulkDB(someData) {
  await collectArticle.sync();
  return await collectArticle.bulkCreate(someData);
}

// 写单条数据
async function createOneDB(oneData) {
  await collectArticle.sync();
  return await collectArticle.create(oneData);
}

// 查询数据库
async function findDB(url) {
  await collectArticle.sync();
  const data = await collectArticle.findOne({ where: { url } });
  return data ? true : false;
}

// 批量一次性添加数据
const bulkAddArticle = async data => {
  if (!Array.isArray(data)) return;
  // 创建表 (如果表已经存在,则先删除) 保证每天数据独一
  await collectArticle.sync({ force: true });
  try {
    // 批量数据添加到数据库
    await createBulkDB(data);
  } catch (err) {
    console.log(err, '数据写入失败');
  }
};

// 递归批量依次添加多条数据
const someAddArticle = async data => {
  if (!Array.isArray(data)) return;
  await collectArticle.sync();
  let index = 0;
  const len = data.length;
  // 处理第一条数据
  insertData(data[index]);
  // 插入数据
  async function insertData(article) {
    try {
      // 查找当前数据库是否存在
      const isData = await findDB(article?.url);
      // 数据库是否存在
      if (!isData) {
        await createOneDB(article); // 写入数据
      }
    } catch (err) {
      console.log(err, '写入失败');
    } finally {
      index++;
      if (index < len) {
        insertData(data[index]); // 递归查找
      } else {
        console.log('文章列表写入成功');
      }
    }
  }
};

// 更新数据库单条数据
const oneUpdateArticle = async article => {
  let { url, title, desc, content } = article;
  return await collectArticle.update(
    { title, desc, content },
    {
      where: { url } // 查询条件
    }
  );
};

// 递归批量依次更新多条数据
const someUpdateArticle = async data => {
  if (!Array.isArray(data)) return;
  await collectArticle.sync();
  let index = 0;
  const len = data.length;
  updateData(data[index]);
  async function updateData(article) {
    try {
      await oneUpdateArticle(article);
    } catch (err) {
      console.log(err, '更新失败');
    } finally {
      index++;
      if (index < len) {
        updateData(data[index]); // 递归更新
      } else {
        console.log('更新成功');
      }
    }
  }
};

module.exports = {
  findDB,
  createOneDB,
  bulkAddArticle,
  someAddArticle,
  oneUpdateArticle,
  someUpdateArticle
};
